package com.zenithmind.chat.pojo.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 聊天消息实体类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("chat_message")
public class ChatMessage {

    /**
     * 消息ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;

    /**
     * 群组ID
     */
    @TableField("group_id")
    private String groupId;

    /**
     * 发送者ID
     */
    @TableField("sender_id")
    private String senderId;

    /**
     * 发送者姓名
     */
    @TableField("sender_name")
    private String senderName;

    /**
     * 发送者头像
     */
    @TableField("sender_avatar")
    private String senderAvatar;

    /**
     * 消息类型（1-文本，2-图片，3-文件，4-语音，5-视频，6-系统消息，7-表情，8-链接）
     */
    @TableField("message_type")
    private Integer messageType;

    /**
     * 消息内容
     */
    @TableField("content")
    private String content;

    /**
     * 媒体文件URL（图片、文件、语音、视频等）
     */
    @TableField("media_url")
    private String mediaUrl;

    /**
     * 媒体文件大小（字节）
     */
    @TableField("media_size")
    private Long mediaSize;

    /**
     * 媒体文件时长（秒，语音、视频使用）
     */
    @TableField("media_duration")
    private Integer mediaDuration;

    /**
     * 缩略图URL
     */
    @TableField("thumbnail_url")
    private String thumbnailUrl;

    /**
     * 回复的消息ID
     */
    @TableField("reply_to_id")
    private String replyToId;

    /**
     * 回复的消息内容（冗余存储，便于显示）
     */
    @TableField("reply_to_content")
    private String replyToContent;

    /**
     * @提及的用户ID列表（JSON格式）
     */
    @TableField("mention_users")
    private String mentionUsers;

    /**
     * 是否@全体成员（0-否，1-是）
     */
    @TableField("mention_all")
    private Integer mentionAll;

    /**
     * 消息状态（1-正常，2-已撤回，3-已删除）
     */
    @TableField("status")
    private Integer status;

    /**
     * 撤回时间
     */
    @TableField("recall_time")
    private LocalDateTime recallTime;

    /**
     * 撤回原因
     */
    @TableField("recall_reason")
    private String recallReason;

    /**
     * 已读用户数
     */
    @TableField("read_count")
    private Integer readCount;

    /**
     * 点赞数
     */
    @TableField("like_count")
    private Integer likeCount;

    /**
     * 是否置顶（0-否，1-是）
     */
    @TableField("is_pinned")
    private Integer isPinned;

    /**
     * 置顶时间
     */
    @TableField("pin_time")
    private LocalDateTime pinTime;

    /**
     * 扩展信息（JSON格式）
     */
    @TableField("extra_info")
    private String extraInfo;

    /**
     * 客户端消息ID（用于去重）
     */
    @TableField("client_msg_id")
    private String clientMsgId;

    /**
     * 发送时间
     */
    @TableField("send_time")
    private LocalDateTime sendTime;

    /**
     * 是否删除（0-未删除，1-已删除）
     */
    @TableField("is_deleted")
    @TableLogic
    private Integer isDeleted;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 创建人
     */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 更新人
     */
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
    private String updateBy;
}
